import axios from 'axios'
import Cookies from 'js-cookie'

class User {
  password: string
  first_name: string
  last_name: string
  email: string
  is_staff: boolean
  last_login: Date
  is_active: boolean

  constructor(password: string, first_name: string, last_name: string, email: string) {
    this.password = password
    this.first_name = first_name
    this.last_name = last_name
    this.email = email
    this.is_staff = false
    this.last_login = new Date()
    this.is_active = true
  }

  /**
   * 用户登录
   */
  login() {
    // Use axios to call login API
    axios
      .post('/api/login', { email: this.email, password: this.password })
      .then((response) => {
        // Store token in cookie
        Cookies.set('token', response.data.token)
        // 更新 Pinia Store 中的用户状态
        store.user = this
      })
      .catch((error) => {
        console.error(error)
      })
  }

  /**
   * 用户注销（登出）
   */
  logout() {
    // 使用axios调用注销API
    axios
      .post('/api/logout', { token: Cookies.get('token') })
      .then((response) => {
        // 从cookie中删除令牌
        Cookies.remove('token')
        // 更新Pinia Store 中的用户状态
        store.user = null
      })
      .catch((error) => {
        console.error(error)
      })
  }

  /**
   * 注册方法
   */
  register() {
    // 使用 axios 调用注册API
    axios
      .post('/api/register', {
        email: this.email,
        password: this.password,
        first_name: this.first_name,
        last_name: this.last_name
      })
      .then((response) => {
        // 将令牌存储在cookie中
        Cookies.set('token', response.data.token)
        // 更新 Pinia store 中的用户状态
        store.user = this
      })
      .catch((error) => {
        console.error(error)
      })
  }

  /**
   * 密码设置方法
   * @param newPassword
   */
  setPassword(newPassword: string) {
    // 使用 axios 调用密码设置 API
    axios
      .post('/api/setPassword', { token: Cookies.get('token'), newPassword: newPassword })
      .then((response) => {
        console.log('Password set successfully')
      })
      .catch((error) => {
        console.error(error)
      })
  }

  /**
   * 密码验证方法
   * @param password
   * @returns
   */
  checkPasswordFormat(password: string) {
    // 使用正则表达式检查密码格式
    const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/
    return regex.test(password)
  }

  /**
   * 获取用户名
   * @returns
   */
  get_username() {
    return this.email
  }

  /**
   * 获取用户全名（名+姓）
   * @returns
   */
  get_full_name() {
    return this.first_name + ' ' + this.last_name
  }

  /**
   * 获取用户名（简名，不含姓）
   * @returns
   */
  get_short_name() {
    return this.first_name
  }

  /**
   * 获取当前用户拥有的权限
   * @returns
   */
  get_user_permissions() {
    return []
  }
}

export { User }
